Webpack 打包类库踩坑

您所在的位置:网站首页 webpack打包报错 不存在node module Webpack 打包类库踩坑

Webpack 打包类库踩坑

#Webpack 打包类库踩坑| 来源: 网络整理| 查看: 265

本文已参与「新人创作礼」活动,一起开启掘金创作之路

写在前面

最近在公司负责开发一套公司业务相关的通用工具库,第一次接触到这种需求,还是很兴奋的,吭哧吭哧开发了一段时间,现在准备开始应用到实际项目中了,于是开始进行 1.0.0.2022.3.23_beta 测试发布工作,虽然之前对 webpack 有所了解,但是并不深入,更多停留在 vue 项目相关的打包上,这次的打包工作有所不同,打包的是纯 js 工具库,于是我开始踩坑,也就有了今天这一篇踩坑实录,接下来就跟我一起看看我的爬坑记吧

项目简介

为了避免对公司相关业务代码的泄露,这里我就采用示例代码表达一下原项目结构

// ==================== tool.js 中的代码 ==================== const toolFun = function(){ console.log('I am a Tool Person!!') } export default toolFun; // ==================== init.js 中的代码 ==================== import core from './core' import Tool from './tool' const init = function(){ core.prototype.Tool = Tool } export default init; // ==================== core.js 中的代码 ==================== import init from './init' const createInstance = function(params){ init(params) } export default createInstance; // ==================== vue 中引用的代码 ==================== import CreateInstance from '@/core/core' export default { mounted(){ const Instance = new CreateInstance() console.log('Instance', Instance) window.Instance = Instance } }

这个项目由一系列 js 工具函数组成,内部经过一系列相互调用后最终在入口文件 core.js 中通过调用 init 方法挂载到实例上,写法可能还有些不太严谨,欢迎大佬指正

踩坑过程 对 js 工具库进行单独打包

因为平时开发的技术栈是 vue ,所以这个项目也以 vue 为测试环境,在 vue 中进行开发,开发过程中完全没有问题,而开始打包的时候,问题就出现了,下面是一开始打包的 webpack 配置:

const path = require('path') module.exports = { mode: 'development', entry: path.resolve(__dirname, 'src/core/core.js'), output: { path: path.resolve(__dirname, 'core'), filename: 'core.min.js', }, module: { rules: [ { test: /\.css$/, use: [ 'style-loader', 'css-loader' ] } ] } }

打包顺利完成

17.png

引入 Vue 中进行测试

接下来就到了引入测试阶段了,果然,并没有想象中那么顺利,报错如期而至

19.png

18.png

问题分析 遇到问题先百度

由于先前没有这方面经验,所以先 百度一下,你就知道了! ,可惜,百度了好多下,我还是不知道。。。

分析报错

于是开始基于报错盲猜,可能是打包配置的问题,而 default 让我几乎猜到就是 export default 导出的问题,于是开始扒拉 webpack官网,找到 DOCUMENTATION-Configuration 中的 OutPut 相关配置

20.png

填坑

修改 webpack 配置,再次打包、测试

const path = require('path') module.exports = { mode: 'development', entry: path.resolve(__dirname, 'src/core/core.js'), output: { path: path.resolve(__dirname, 'core'), filename: 'core.min.js', libraryTarget: 'umd' // 添加输出库配置 }, module: { rules: [ { test: /\.css$/, use: [ 'style-loader', 'css-loader' ] } ] } }

测试正常,至此踩坑结束!

21.png

扩展 Webpack & Rollup

虽然踩了一个很小很初级的坑,但是还是在这个过程中学到了不少,解决完打包问题后,顺便了解了下相关的打包工具,其中两大框架 React、Vue 打包所使用的 Rollup 号称打包单一工具类库更简洁、体积更小,于是不多说,顺手做个 Webpack、Rollup 对比

打包文件对比

22.png 23.png 不难看出,webpack 打包产生的文件要比 rollup 的杂乱非常多,其实这是因为 webpack 自己实现了一套 __webpack_exports__ __webpack_require__ module 机制,然后把每个js文件包裹在一个函数里,实现模块间的引用和导出,因此使得打包后的代码显得不堪入目,而 rollup 的简洁程度就比 webpack 高了不止一个 level了,难怪 React、Vue 两大框架都选用它作为御用打包工具。

应用场景

正如官网介绍所说的: Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序。 Webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bundles,它们均为静态资源,用于展示你的内容。 Rollup就是一个用来打包类库的最佳打包工具,而 Webpack 更加偏向于前端工程化,更加适合涉及 css、html 等复杂的代码拆分合并的场景。

总结

Webpack 的配置还是相对比较固定的,常用的配置项无非就是那么几项,只要能够多花时间,熟悉各种场景所对应的特定配置,基本上就能够少踩很多的坑!

往期好文推荐

面试官:说说从输入 URL 到页面显示到底经历了什么,体现一下你的知识广度

面试官:作为前端,服务器相关了解多少?

面试官:HTTPS 采用的是对称加密还是非对称加密?具体说说其加密过程

面试官:说说 Cookie 和 Token 的区别?

面试官:网络安全了解多少,简单说说?(一)

面试官:网络安全了解多少,简单说说?(二)

面试官:网络安全了解多少,简单说说?(三)

面试官:网络安全了解多少,简单说说?(四)

面试官:网络安全了解多少,简单说说?(五)

面试官:网络安全了解多少,简单说说?(六)

面试官:网络安全了解多少,简单说说?(七)

面试官:网络安全了解多少,简单说说?(八)

浅尝 | 从 0 到 1 Vue 组件库封装

面试官:这么简单的正则表达式都不会?

Webpack 打包类库踩坑

面试官:你就只会 npm run build 吗?(Webpack 配置 Vue+Ts)

面试官:连VuePress都没搭过还说开发过组件库?(VuePress 搭建)

面试官: 连 Vue 视图更新都不会写?(Vue视图更新原理【一】)

面试官: 能不能手写 Vue 响应式?(Vue2 响应式原理【完整版】)

面试官:能不能手写 Vue3 响应式(Vue3 原理解析之响应系统的实现)

JS 优雅之道(JS 代码优化小 Tip)

面试官:你真的会用 SVG 吗? (SVG 应用实战)

面试官:说一下这个Loading动画实现思路 (CSS3 实现 Loading 动画)

JS 扫盲题 ( 面试题梳理系列 (一))

面试官:你确定你说的防抖不是节流吗?( 面试题梳理系列 (二))

面试官:除了 HTTP,你还用过什么通信协议?(Websocket 在数字孪生中的应用)

面试官:你真的理解 Event Loop 吗?( JS 事件循环 )

面试官:v-for 中 key 为什么不能用 index,从原理层面聊聊?

面试官:vue-router 的 hash 与 history 哪个模式会刷新页面?

面试官:说说你平时用过的自适应方案(数字孪生可视化自适应方案)

面试官:说一下如何优化过渡动画(数字孪生可视化过渡动画)

写在最后

博主接下来将持续更新好文,欢迎关注博主哟!! 如果文章对您有帮助麻烦亲点赞、收藏 + 关注和博主一起成长哟!!❤️❤️❤️



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3